Don't panic on unused overrides
authorAlex Crichton <alex@alexcrichton.com>
Mon, 10 Nov 2014 17:36:36 +0000 (09:36 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Mon, 10 Nov 2014 17:36:36 +0000 (09:36 -0800)
This previously did a failing hashtable lookup when an `Option`-returning `get`
would suffice.

src/cargo/ops/cargo_rustc/custom_build.rs
tests/test_cargo_compile_custom_build.rs

index 342f67e11068e0c448646798b18d226072b0176f..d4d945b5160c08ea99cab000573133d211bfbdcb 100644 (file)
@@ -212,11 +212,13 @@ impl BuildState {
             }
         }
         let mut outputs = HashMap::new();
-        for (name, output) in config.host.overrides.into_iter() {
-            outputs.insert((sources[name].clone(), KindHost), output);
-        }
-        for (name, output) in config.target.overrides.into_iter() {
-            outputs.insert((sources[name].clone(), KindTarget), output);
+        let i1 = config.host.overrides.into_iter().map(|p| (p, KindHost));
+        let i2 = config.target.overrides.into_iter().map(|p| (p, KindTarget));
+        for ((name, output), kind) in i1.chain(i2) {
+            match sources.get(&name) {
+                Some(id) => { outputs.insert((id.clone(), kind), output); }
+                None => {}
+            }
         }
         BuildState { outputs: Mutex::new(outputs) }
     }
index cd143bc9c4f105f985d4c395ffdd6d00c3490e80..deec359fa77242aa507cae50a927f9347dedf906 100644 (file)
@@ -297,6 +297,30 @@ test!(overrides_and_links {
 ", compiling = COMPILING, running = RUNNING).as_slice()));
 })
 
+test!(unused_overrides {
+    let (_, target) = ::cargo::ops::rustc_version().unwrap();
+
+    let p = project("foo")
+        .file("Cargo.toml", r#"
+            [project]
+            name = "foo"
+            version = "0.5.0"
+            authors = []
+            build = "build.rs"
+        "#)
+        .file("src/lib.rs", "")
+        .file("build.rs", "fn main() {}")
+        .file(".cargo/config", format!(r#"
+            [target.{}.foo]
+            rustc-flags = "-L foo -L bar"
+            foo = "bar"
+            bar = "baz"
+        "#, target).as_slice());
+
+    assert_that(p.cargo_process("build").arg("-v"),
+                execs().with_status(0));
+})
+
 test!(links_passes_env_vars {
     let p = project("foo")
         .file("Cargo.toml", r#"